package projet;

import java.util.ArrayList;
import java.util.Iterator;

import exceptions.*;

public class ProducedPiece extends Piece {
	
	// attributs
	/* liste des noms des operations a realiser lors de la fabrication de la piece */
	private ArrayList<String> montage=new ArrayList<String>();
	
	/**
	 * Constructeur avec argument
	 * @param l
	 */
	public ProducedPiece(String l){
		super(l);
	}
	
	/**
	 * Constructeur sans arguments pour le XML
	 */
	public ProducedPiece() {
	}
	
	// methodes
	/** verification de validite du montage: 
	 * 	-existance des operations
	 * 	-Pas de recursion la piece X ne doit pas être néccéssaire à son propre montage.
	 *  @return true si montage valide
	 *  @throws PFCheckMontageException si probleme pour tester
	 */
	public Boolean checkMontage(){
		Iterator<String> it=montage.iterator();
		String piece = null ;
		for (;it.hasNext();)
			piece = it.next() ;
			if (!Operation.checkName(piece)){
				return false;
			}
		return true;		
	}
	
	/**
	 * Ajouter une Operation à la liste des operation néccéssaires.
	 * @param o le nom de cette operation
	 */
	public void addOperation(String o) {
		this.montage.add(o) ;
	}

	/**
	 * @Override Piece.PrintOnPanel()
	 */
	public String PrintOnPanel() {
		String r="\t\tPiece Produite: Libelle: "+label+"\n\t\t\tOperations necessaires:\n";
		Iterator<String> it=montage.iterator();
		for (;it.hasNext();)
			r=r+"\t\t\t\t"+it.next()+"\n";
		return r;
	}
	
	/**
	 *@param stbuf la chaine de caractere precedente ou est concatene le texte xml
	 *@return la chaine de caractere resultante
	 */
	public String xml(StringBuffer stbuf){
		Iterator<String> it= montage.iterator();
		stbuf.append(" <ProducedPiece>\n");
		stbuf.append("  <label>"+label+"</label>\n");
		while(it.hasNext())
			stbuf.append("  <operation>"+it.next()+"</operation>\n");
		stbuf.append(" </ProducedPiece>\n");
		return ""+stbuf;
	
	}
	
	
	/**
	 * @return un itérateur sur les différentes nom des étapes du montage.
	 */
	public Iterator<String> iterator() {
		return montage.iterator() ;
	}
	
	/**
	 * @return le nom de la piece avec les nom des operations à effectuer.
	 */
	public String description() {
		/* Ecrire le nom de la piece */
		String returnedString = label +" (operation(s) " ;
		/* Ecrire les noms des operation entre parenthèses */
		Iterator<String> iter = iterator() ;
		while(iter.hasNext()) {
			returnedString += iter.next()+(iter.hasNext() ? "," : ") :") ;
		}
		return returnedString ;
	}
}
